package main.leetcode.primary.from001to100;

import main.datastruc.ListNode;

/**
 * 19.删除链表的第N个节点
 *
 * <p>给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点。
 *
 * <p>示例：
 *
 * <p>给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后，链表变为 1->2->3->5.
 *
 * <p>说明：给定的 n 保证是有效的。
 *
 * <p>进阶：你能尝试使用一趟扫描实现吗？
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ex19 {

    public static ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode pre = head, last = pre;
        for (int i = 0; i < n; i++) last = last.next;
        if (last == null) return pre.next;
        while (last.next != null) {
            pre = pre.next;
            last = last.next;
        }
        pre.next = pre.next.next;
        return head;
    }
}
